package org.hcf.api.tencent.api;

import lombok.Data;
import org.hcf.api.tencent.callback.info.group.base.MessageBody;
import org.hcf.api.tencent.api.base.OfflinePush;

import java.util.List;

@Data
/** 单发单聊消息 */
public class FriendChatMsg {
    /** 1：把消息同步到 From_Account 在线终端和漫游上; 2：消息不同步至 From_Account; 若不填写默认情况下会将消息存 From_Account 漫游 */
    int SyncOtherMachine = 1;
    /** 消息发送方 UserID（用于指定发送消息方账号） */
    String From_Account;
    /** 消息接收方 UserID */
    String To_Account;
    /** 默认为 0，表示消息存历史聊天记录; 1表示消息不存历史聊天记录，即发送消息时，若接收方在线，则能收到此消息，若接收方不在线，则收不到该消息。适用于实现一些实时状态类的功能，如实现“对方正在输入”功能 */
    int OnlineOnlyFlag;
    /** 消息序列号（32位无符号整数），后台会根据该字段去重及进行同秒内消息的排序，详细规则请看本接口的功能说明。若不填该字段，则由后台填入随机数 */
    int MsgSeq;
    /** 消息随机数（32位无符号整数），后台用于同一秒内的消息去重。请确保该字段填的是随机数 */
    int MsgRandom;
    /** 消息回调禁止开关，只对本条消息有效，ForbidBeforeSendMsgCallback 表示禁止发消息前回调，ForbidAfterSendMsgCallback 表示禁止发消息后回调 */
    List<String> ForbidCallbackControl;
    /**
     * 消息发送控制选项，是一个 String 数组，只对本条消息有效。
     * "NoUnread"表示该条消息不计入未读数。
     * "NoLastMsg"表示该条消息不更新会话列表。
     * "WithMuteNotifications"表示该条消息的接收方对发送方设置的免打扰选项生效（默认不生效）。
     * "NoMsgCheck"表示开启云端审核后，该条消息不送审。
     * "WithBlackListCheck"表示该条消息会检查发送者和接收者的黑名单。
     * "WithFriendCheck"表示该条消息会检查发送者和接收者的好友关系。若在控制台关闭了发消息好友关系检查，WithFriendCheck 不生效。
     * "WithSpeakingCheck"表示该条消息会检查接收者是否被禁言。
     * 示例：
     * "SendMsgControl": ["NoUnread","NoLastMsg","WithMuteNotifications","NoMsgCheck"]
     * */
    List<String> SendMsgControl;
    /** 消息内容，具体格式请参考 消息格式描述（注意，一条消息可包括多种消息元素，MsgBody 为 Array 类型） */
    List<MessageBody> MsgBody;
    /** 消息自定义数据（云端保存，会发送到对端，程序卸载重装后还能拉取到） */
    String CloudCustomData;
    /** 该条消息是否支持消息扩展： 0为不支持; 1为支持 */
    int SupportMessageExtension;
    /** 离线推送信息配置，具体可参考 消息格式描述 */
    OfflinePush OfflinePushInfo;
    /** 该条消息是否需要已读回执： 0为不需要; 1为需要; 默认为0 */
    int IsNeedReadReceipt = 1;
}
